package com.lh.utils;

import org.apache.commons.lang3.StringUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;

public class DateUtils {

    // 定义多种可能的日期格式
    private static final List<String> DATE_FORMATS = new ArrayList<String>() {{
        add("yyyy-MM-dd HH:mm:ss");  // 优先解析带时间的格式
        add("yyyy.M.d");
        add("yyyy.MM.dd");
        add("yyyy-MM-dd");           // 纯日期格式后移
        add("yyyy/MM/dd");
        add("yyyy年MM月dd日");
        add("yyyy-M-d");
        add("yyyy/M/d");
        add("MM/dd/yyyy");
        add("dd/MM/yyyy");
    }};
    /**
     * 解析日期字符串为LocalDate（Java 8+推荐）
     * @param dateString 日期字符串
     * @return LocalDate对象或null（解析失败）
     */
    public static LocalDate parseToLocalDate(String dateString) {
        if (dateString == null || dateString.trim().isEmpty()) {
            System.out.println("日期字符串不能为空");
            return null;
        }

        for (String format : DATE_FORMATS) {
            try {
                DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
                return LocalDate.parse(dateString, formatter);
            } catch (DateTimeParseException e) {
                // 尝试下一种格式，不打印异常
            }
        }

        System.out.println("无法解析日期: " + dateString + "，请检查格式是否正确");
        return null;
    }

    /**
     * 解析日期字符串为Date（兼容旧API）
     * @param dateString 日期字符串
     * @return Date对象或null（解析失败）
     */
    public static Date parseToDate(String dateString) {
        if (dateString == null || dateString.trim().isEmpty()) {
            System.out.println("日期字符串不能为空");
            return null;
        }
        for (String format : DATE_FORMATS) {
            try {
                SimpleDateFormat sdf = new SimpleDateFormat(format);
                sdf.setTimeZone(TimeZone.getDefault());
                return sdf.parse(dateString);
            } catch (ParseException e) {
                // 尝试下一种格式，不打印异常
            }
        }

        System.out.println("无法解析日期: " + dateString + "，请检查格式是否正确");
        return null;
    }

    // 测试方法
    public static void main(String[] args) {
        String[] testDates = {
                "2025.2.18",
                "2025.02.18",
                "2025-2-18",
                "2025/02/18",
                "2025年02月18日",
                "02/18/2025",
                "18/02/2025",
                "2025-02-18"
        };

        System.out.println("测试LocalDate解析:");
        for (String date : testDates) {
            LocalDate localDate = parseToLocalDate(date);
            System.out.println(date + " -> " + (localDate != null ? localDate.toString() : "解析失败"));
        }

        System.out.println("\n测试Date解析:");
        for (String date : testDates) {
            Date utilDate = parseToDate(date);
            System.out.println(date + " -> " + (utilDate != null ? utilDate.toString() : "解析失败"));
        }
    }


}
